
/*

Design Pattern Automation Toolkit.
Application to create applications with emphasis on Design patterns.
And support for round trip engineering.
Copyright (C) 2004 Vineeth Neelakant. nvineeth@gmail.com

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/
using System;
using System.Collections;
using System.Reflection;
using System.Drawing;
using DesignPatternDefinitions;

namespace DotNetReverseEngineering
{
	/// <summary>
	/// IClass Concrete class
	/// </summary>
	public class ClassDetails : IClass
	{
		Type clsType;
		Hashtable metaInfoMap;
		public ClassDetails(Type t)
		{
			if( !t.IsInterface || !t.IsClass)
				throw new ArgumentException("Not an interface/class","Type t");
			this.clsType = t;
			this.metaInfoMap = new Hashtable ();
		}
		
		private void InitMetaInfo()
		{
			this.metaInfoMap.Add("C#","see sharp");
			
		}
		#region IClass Members

		public Hashtable GetAllMetaInfo()
		{
			return this.metaInfoMap;
		
		}
		public System.Drawing.Point UILocation
		{
			get
			{
				// TODO:  Add ClassDetails.UILocation getter implementation
				return new Point(1,1);
			}
			set
			{
				// TODO:  Add ClassDetails.UILocation setter implementation
			}
		}

		public System.Collections.ArrayList Methods
		{
			get
			{
				// TODO:  Add ClassDetails.Methods getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.Methods setter implementation
			}
		}

		public System.Collections.ArrayList InheritedClasses
		{
			get
			{
				// TODO:  Add ClassDetails.InheritedClasses getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.InheritedClasses setter implementation
			}
		}

		public DesignPatternDefinitions.ClassType ClassType
		{
			get
			{
				// TODO:  Add ClassDetails.ClassType getter implementation
				return new DesignPatternDefinitions.ClassType ();
			}
			set
			{
				// TODO:  Add ClassDetails.ClassType setter implementation
			}
		}

		public string QualifiedClassName
		{
			get
			{
				return this.clsType.Namespace+"."+this.clsType.Name;
			}
			set
			{
				// TODO:  Add ClassDetails.QualifiedClassName setter implementation
			}
		}

		
		public string AccessModifier
		{
			get
			{
				// TODO:  Add ClassDetails.AccessModifier getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.AccessModifier setter implementation
			}
		}

		public System.Collections.ArrayList Creations
		{
			get
			{
				// TODO:  Add ClassDetails.Creations getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.Creations setter implementation
			}
		}

		public System.Collections.ArrayList Aggregates
		{
			get
			{
				// TODO:  Add ClassDetails.Aggregates getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.Aggregates setter implementation
			}
		}

		public System.Collections.ArrayList Fields
		{
			get
			{
				// TODO:  Add ClassDetails.Fields getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.Fields setter implementation
			}
		}

		public string GetMetaInfo(string language)
		{
			// TODO:  Add ClassDetails.GetMetaInfo implementation
			return null;
		}

		public System.Collections.ArrayList References
		{
			get
			{
				// TODO:  Add ClassDetails.References getter implementation
				return null;
			}
			set
			{
				// TODO:  Add ClassDetails.References setter implementation
			}
		}

		public string ClassName
		{
			get
			{
				return this.clsType.Name;
			}
			set
			{
				//Not required.
			}
		}

		public string ComponentName
		{
			get
			{
				return this.clsType.Namespace;
			}
			set
			{
				// Not Required.
			}
		}

		public string ClassSummary
		{
			get
			{
				return this.clsType.Namespace+"."+this.clsType.Name;
			}
			set
			{
				// Not Required
			}
		}

		public bool Abstract
		{
			get
			{
				return this.clsType.IsAbstract;
			}
			set
			{
				// TODO:  Add ClassDetails.Abstract setter implementation
			}
		}

		#endregion
	}
}
